package com.example.homework.arraylist.homework03;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        /*
        1.定义"程序员"类,Coder,包含以下成员:
        1.1成员属性: name (姓名):String类型, age (年龄):int类型, like (爱好):String类型
        1.2要求: 成员变量private修饰 生成空参构造/满参构造 生成set/get方法
        2.定义类Test,类中定义main()⽅法,按以下要求编写代码:
            2.1分别创建四个Coder对象,四个对象的属性分别为：
                "王宝强" ,25,”打篮球”
                "汪峰" ,35,”游泳”
                "李铁" ,19,”踢足球”
                "姚明" ,18,”击剑”;
            2.2创建一个ArrayList集合,这个集合里面存储的是Coder类型,分别将上面的四个Coder对象添加到集合中
            2.3遍历这个集合,在遍历的过程中,如果集合中对象的年龄大于30,那么将这个对象的爱好改成”打保龄球”,
                如果对象的年龄小于20, 那么就把这个对象删除
            2.4正确修改和删除对象后,遍历集合,打印集合里所有对象的所有属性信息到控制台
            2.5输出格式:
                王宝强----25----打篮球
                汪峰----35----打保龄球
         */
        ArrayList<Coder> list = new ArrayList<>();
        list.add(new Coder("王宝强", 25, "打篮球"));
        list.add(new Coder("汪峰", 35, "游泳"));
        list.add(new Coder("李铁", 19, "踢足球"));
        list.add(new Coder("姚明", 18, "击剑"));

        // 使用stream流
        // 使用 peek 方法遍历流中的每个元素，并根据条件修改元素的 like 属性
        list.stream().filter(coder -> !(coder.getAge() < 20)).peek(coder -> {
                    if (coder.getAge() > 30) {
                        coder.setLike("打保龄球");
                    }
                })
                .forEach(coder -> System.out.println(coder.getName() + "----" + coder.getAge() + "----" + coder.getLike()));

        /*list.stream().filter(coder -> !(coder.getAge() < 20)).map(coder -> {
                    if (coder.getAge() > 30) {
                        coder.setLike("打保龄球");
                    }
                    return coder;
                })
                .forEach(coder -> System.out.println(coder.getName() + "----" + coder.getAge() + "----" + coder.getLike()));*/

        System.out.println("-------------------------------------------------------");

        // 传统的方式
        for (int i = 0; i < list.size(); i++) {
            // 取出当前索引对应的数据
            Coder coder = list.get(i);
            if (coder.getAge() > 30) {
                coder.setLike("打保龄球");
            } else if (coder.getAge() < 20) {
                list.remove(coder);
                // 可能会出现多个年龄小于20岁的,所以需要i--防止出现漏删的情况
                i--;
            }
        }

        // 遍历集合输出
        list.forEach(coder -> System.out.println(coder.getName() + "----" + coder.getAge() + "----" + coder.getLike()));
    }
}
